from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button

class list_layout( GridLayout ):
    def __init__( self, item_list, next_layout, **kwargs ):
        super( list_layout, self ).__init__( **kwargs )
        
        self.item_list = item_list
        def selected_item( instance ):
            self.parent.add_widget( next_layout( self.item_list[ self.children.index(instance) ] ) )
            self.parent.remove_widget( self )
            
        index = 0
        for item in self.item_list:
            test = Button( text = 'test' )
            test.bind( on_release = selected_item )
            self.add_widget( test, index )
            index += 1

        
if __name__ == '__main__':
    from kivy.app import App
    class MyButton( Button ):
        def __init__( self, title ):
            super( MyButton, self ).__init__( text = title )
            
    class testApp( App ):
        def build( self ):
            item_list = ['freefall',]
            return list_layout( item_list, MyButton, cols = 2, rows = 2 )

    testApp().run()